<body>
    <script>
        // 程序的执行：程序从(硬盘)磁盘读到内存里面被cpu运行

        //  内存的存储机制
        // 1内存：运行储存，临时存储，程序结束，数据被释放
        // 2内存中划分了：栈空间和堆空间
        // 3 栈空间空间较小，一般用来存储一些标志或地址，稳定不可修改    
                 // 存储规则：先进后出
        // 4堆空间：空间大，一般用来存储大量的数据，可修改，灵活
                 //  存储规则：先进先出
       // 5关系：堆栈可以一一对应，可以多对一，不可以一对多
 
    //    多对一
       var a=1;
       var b=1;
       var c=1;
       var d=1;
       console.log(a,b,c,b)

    //    一对多
    
        var a1 = 11
        var a2 = 11
        var a3 = 11
        console.log(a1,a2,a3)
        
        // # 五、基本数据类型和复杂数据类型
        // 1. 基本：string，number，boolean，undefined，null
        //     - 变量名和数据都存在栈中，数据本身被作为的一个标志
        //     - 值传递
        //     - 值就是地址，地址就是值
        // 2. 复杂：object，function
        //     - 变量存在栈中，表示地址
        //     - 数据存在堆中，被地址指向
        //     - 引用传递（传递地址）
        //     - 地址是地址，值是值
        // 3. 赋值运算符的赋值
        //     - 只是在拷贝地址（栈）
        //     - 因为基本类型，地址就是值，值就是地址，所以拷贝栈中的地址，等同于拷贝了值

        // # 六、深浅拷贝 - 复杂数据类型（引用）
        // 1. 深拷贝：拷贝的是堆中的数据（值）
        // 2. 浅拷贝：拷贝的是栈中的地址（引用）
        //     - 修改了新拷贝出的数据，会影响原数据
        // 3. 如何实现深拷贝
        //     - 解析复杂数据为基本数据之后，再进行拷贝
        //         - 解析方式：
        //             - 数组：循环配合索引(0~length-1)
        //             - 对象：for-in语句
    </script>
</body>